package com.hongyi.system.service;


import com.hongyi.common.framework.domain.JsonResult;
import com.hongyi.common.framework.domain.LoginUser;
import com.hongyi.common.mybatis.page.PageData;
import com.hongyi.common.mybatis.page.PageQuery;
import com.hongyi.system.domain.dto.SysUserDto;
import com.hongyi.system.domain.vo.SysUserVo;

import java.util.List;

public interface ISysUserService{

    /**
     * 获取用户列表
     *
     * @param sysUserDto 查询条件
     * @param pageQuery 分页参数
     * @return  用户列表
     */
    PageData<SysUserVo> selectPageUserList(SysUserDto sysUserDto, PageQuery pageQuery);

    /**
     * 根据条件分页查询用户列表
     *
     * @param sysUserDto 用户信息
     * @return 用户信息集合信息
     */
    List<SysUserVo> selectUserList(SysUserDto sysUserDto);

    /**
     * 通过用户ID查询用户
     *
     * @param userId 用户ID
     * @return 用户对象信息
     */
    SysUserVo selectUserById(Long userId);

    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    SysUserVo selectUserByUserName(String userName);

    /**
     * 用户授权角色
     *
     * @param userId  用户ID
     * @param roleIds 角色组
     */
    void insertUserAuth(Long userId, Long[] roleIds);

    /**
     * 校验用户是否允许操作
     *
     * @param userId 用户ID
     */
    void checkUserAllowed(Long userId);

    /**
     * 根据用户ID查询用户所属角色组
     *
     * @param userName 用户名
     * @return 结果
     */
    String selectUserRoleGroup(String userName);

    /**
     * 根据用户ID查询用户所属岗位组
     *
     * @param userName 用户名
     * @return 结果
     */
    String selectUserPostGroup(String userName);

    /**
     * 新增用户
     *
     * @param sysUserDto 用户信息
     * @return 结果
     */
    JsonResult<Void> saveUser(SysUserDto sysUserDto);

    /**
     * 校验手机号码是否唯一
     *
     * @param sysUserDto@return 结果
     */
    boolean checkPhoneUnique(SysUserDto sysUserDto);

    /**
     * 校验email是否唯一
     *
     * @param sysUserDto
     * @return 结果
     */
    boolean checkEmailUnique(SysUserDto sysUserDto);

    /**
     * 修改用户
     *
     * @param sysUserDto 用户信息
     * @return 结果
     */
    JsonResult<Void> editUser(SysUserDto sysUserDto);

    /**
     * 修改用户基本信息
     *
     * @param sysUserDto@return 结果
     */
    int updateUserProfile(SysUserDto sysUserDto);

    /**
     * 用户界面重置用户密码
     *
     * @param sysUserDto 用户信息
     * @return 结果
     */
    Boolean resetPwd(SysUserDto sysUserDto);

    /**
     * 个人中心重置用户密码
     *
     * @param userId
     * @param password 密码
     * @return 结果
     */
    int resetUserPwd(Long userId, String password);

    /**
     * 修改用户状态
     *
     * @param sysUserDto 用户信息
     * @return 结果
     */
    Boolean updateUserStatus(SysUserDto sysUserDto);

    /**
     * 修改用户头像
     *
     * @param userId
     * @param avatar 头像地址
     * @return 结果
     */
    boolean updateUserAvatar(Long userId, String avatar);

    /**
     * 批量删除用户信息
     *
     * @param userIds 需要删除的用户ID
     * @return 结果
     */
    int deleteUserByIds(Long[] userIds);

}
